package com.example.pcl.controller.admin;

import com.example.pcl.constant.MessageConstants;
import com.example.pcl.pojo.dto.CounselorQueryDto;
import com.example.pcl.pojo.entity.Counselors;
import com.example.pcl.result.Result;
import com.example.pcl.service.ICounselorsService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.jetbrains.annotations.NotNull;
import org.springframework.http.ResponseEntity;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * <p>
 * 心理咨询师表，存储心理咨询师个人信息 前端控制器
 * </p>
 *
 * @author xx
 * @since 2024-12-17
 */
@RestController("adminCounselorsController")
@RequestMapping("/admin/counselor")
@Slf4j
@Tag(name = "管理端心理咨询师相关接口")
@RequiredArgsConstructor
public class CounselorsController {
    private final ICounselorsService counselorService;

    /**
     * 新增心理咨询师
     *
     * @param counselor 心理咨询师对象，包含姓名、资质、擅长领域等信息
     * @return 操作结果
     */
    @PostMapping
    @Operation(summary = "新增心理咨询师")
    public Result<?> addCounselor(@RequestBody @Validated Counselors counselor) {
        counselorService.addCounselor(counselor);
        return Result.success(MessageConstants.ADD_OK);
    }

    /**
     * 删除心理咨询师
     *
     * @param id 心理咨询师的唯一标识符
     * @return 操作结果
     */
    @DeleteMapping("/{id}")
    @Operation(summary = "删除心理咨询师")
    public Result<?> deleteCounselor(@PathVariable Integer id) {
        counselorService.deleteCounselor(id);
        return Result.success(MessageConstants.OPERATION_SUCCESSFUL);
    }

    /**
     * 修改心理咨询师信息
     *
     * @param counselor 修改后的心理咨询师对象
     * @return 操作结果
     */
    @PutMapping("/update")
    @Operation(summary = "修改心理咨询师信息")
    public Result<?> updateCounselor(@RequestBody @Validated @NotNull Counselors counselor) {
        counselorService.updateCounselor(counselor);
        return Result.success(MessageConstants.OPERATION_SUCCESSFUL);
    }

    /**
     * 查询心理咨询师列表
     *
     * @return 心理咨询师列表
     */
    @GetMapping("/list")
    @Operation(summary = "查询心理咨询师列表")
    public Result<?> listCounselors(CounselorQueryDto queryDto) {
        return Result.success(counselorService.listAll(queryDto), MessageConstants.SELECT_OK);
    }

    /**
     * 查询单个心理咨询师详情
     *
     * @param id 心理咨询师的唯一标识符
     * @return 心理咨询师详情
     */
    @GetMapping("/{id}")
    @Operation(summary = "查询单个心理咨询师详情")
    public Result<?> getCounselorById(@PathVariable Integer id) {
        return Result.success(counselorService.getById(id));
    }

    /**
     * 更新心理咨询师上班状态
     *
     * @param id       心理咨询师的唯一标识符
     * @param isOnDuty 是否上班状态（true: 上班, false: 不上班）
     * @return 操作结果
     */
    @PutMapping("/{id}/duty")
    @Operation(summary = "更新心理咨询师上班状态")
    public Result<?> updateDutyStatus(@PathVariable Integer id, @RequestParam Integer isOnDuty) {
        counselorService.updateDutyStatus(id, isOnDuty);
        return Result.success(MessageConstants.OPERATION_SUCCESSFUL);
    }
}
